package ar.edu.utn.frba.dds.tp.homes;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import uqbar.arena.persistence.PersistentHome;
import ar.edu.utn.frba.dds.tp.code.transacciones.TipoTransaccion;
import ar.edu.utn.frba.dds.tp.code.transacciones.Transaccion;
import ar.edu.utn.frba.dds.tp.code.usuarios.Usuario;


public class TransaccionesHome extends PersistentHome<Transaccion> implements Serializable{

	private static final long serialVersionUID = 1L;
	private static TransaccionesHome instance;
//	private List<Transaccion> transacciones = new ArrayList<Transaccion>();
	

	// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	// +++ methods ++++++++++++++++++++++++++++++++++++++++++++++++
	// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	
	
	public static TransaccionesHome getInstance() {
		if (instance == null) {
			instance = new TransaccionesHome();
		}
		return instance;
	}

	public void registrar(Transaccion transaccion) {
		this.create(transaccion);
	}
	
	public List<Transaccion> getTransacciones(){
			return this.allInstances();
	}

	public List<Transaccion> getCompras() {
		return this.searchByExample(new Transaccion(null, null, TipoTransaccion.COMPRA));
	}

	public List<Transaccion> getReservas() {
		return this.searchByExample(new Transaccion(null, null, TipoTransaccion.RESERVA));
	}

	public List<Transaccion> getCompras(Usuario user) {
		return this.getTransaccionesDe(user, TipoTransaccion.COMPRA);
	}
	
	public List<Transaccion> getReservas(Usuario user) {
		return this.getTransaccionesDe(user, TipoTransaccion.RESERVA);
	}
	
	public List<Transaccion> getTransaccionesDe(Usuario user, TipoTransaccion tipo) {
//		Transaccion example = new Transaccion();
//		example.setComprador(user.getDni());
//		example.setTipo(tipo);
//		example.setUsuario(null);
		List<Transaccion> ts = 
			new ArrayList<Transaccion>();
//			this.searchByExample(example);		//TODO PREGUNTAR! esto no funca, lo tengo que hacer a mano. 
		List<Transaccion> allInstances = this.allInstances();
		for (Transaccion t : allInstances) {
			if (t.getUsuario().getDni().equals(user.getDni()) && t.getTipo().equals(tipo))
				ts.add(t);
		}
		return ts;
	}

	@Override
	public Class<Transaccion> getEntityType() {
		return Transaccion.class;
	}

	@Override
	public Transaccion createExample() {
		return new Transaccion();
	}
}
